package co.edu.aplicacion.servicios.impl;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import co.edu.aplicacion.Cancion;
import co.edu.aplicacion.servicios.def.IReproductor;

public class Reproductor implements IReproductor {

	private HiloReproductor hilo;
	private Cancion cancion;
	private int tiempo;

	@Override
	public List<Cancion> buscarCanciones(String ruta) {
		return buscarHilosConPool(ruta);
	}

	public void reproducir(Cancion cancion) {
		try {
			if (hilo != null) {
				hilo.detener();
			}
			this.cancion = cancion;
			hilo = new HiloReproductor(cancion.getRuta());
			hilo.start();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void pausar() {
		tiempo = hilo.pausar();
	}

	@Override
	public void continuar() {
		// hilo=new HiloReproductor(cancion.getRuta(),tiempo);
	}

	
	public List<Cancion> buscarHilosConPool(String ruta){
		Queue<String> cola = new LinkedList<String>();
		cola.add(ruta);
		ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 4, 5, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());
		int contador=0;
		List<Cancion> canciones = new ArrayList<Cancion>();
		while (contador==0 || threadPoolExecutor.getTaskCount()!=threadPoolExecutor.getCompletedTaskCount()){
			contador=1;
			if(cola.isEmpty()){
				contador++;
//				try {
////					Thread.sleep(1000*(++contador));
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
			}else{
				contador=0;
				String rut=cola.remove();
				threadPoolExecutor.execute(new HiloBuscador1(rut, cola, canciones));
			}
//			if(contador>=10){
//				break;
//			}
		}
		threadPoolExecutor.shutdownNow();
		return canciones;
	}
}